package com.sprouting.personal.config;

import cn.hutool.core.io.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * SQLite 监听
 * 用于检测数据库是否存在否则自动创建数据，但现在看来，sqlite似乎会自动创建数据库，但有时候又不行，暂时不知道原因
 *
 * @author ：LX（长沙麓谷）
 * @date 创建时间： 2023/2/10 22:04
 */
// @Component
@Slf4j
public class SqliteListener {

    /**
     * 获取到数据库连接
     */
    @Value("${spring.datasource.url}")
    private String databaseUrl;

    /**
     * 监听系统启动
     */
    // @EventListener(ApplicationReadyEvent.class)
    public void createSQLiteDb() {
        Connection connection = null;

        try {

            log.info("[数据库开机检测] 检测数据库是否存在");
            // 我们使用了jdbc:sqlite URL连接数据库，并使用DriverManager类获取数据库连接。在连接不存在的情况下，抛出SQLException，则表示数据库不存在，此时可以手动创建数据库。
            connection = DriverManager.getConnection(databaseUrl);
            log.info("[数据库开机检测] 数据库存在,退出");

        } catch (SQLException e) {
            // 创建数据库
            log.warn("[数据库开机检测] 开始创建SQLite数据库");
            String path = databaseUrl.substring(databaseUrl.indexOf("sqlite:")).replace("sqlite:", "");
            FileUtil.touch(path);
            log.warn("[数据库开机检测] 数据库创建成功");

        } finally {
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    // ignore
                    log.error("[数据库开机检测] 关闭检测数据库的连接失败", e);
                }
            }
        }
    }

}
